var datas = [{id:0,name:'泰坦尼克号',type:'爱情',p1:3,p2:13},
                {id:1,name:'肖申克的救赎',type:'犯罪',p1:10,p2:3},
                {id:2,name:'我是谁',type:'动作',p1:20,p2:5},
                {id:3,name:'这个杀手不太冷',type:'犯罪',p1:25,p2:6},
                {id:4,name:'海上钢琴师',type:'爱情',p1:1,p2:12},
                {id:5,name:'摔跤吧！爸爸',type:'动作',p1:19,p2:8},
                ];

$(function($) {
    for (var i = 0; i < datas.length; i++) {
        makeTr(datas[i]);
    }
    //动态调整p值
    $("#tbody").find(".p").bind('keyup',function(){
        var id = parseInt($($(this).parents(".dataTr")[0]).attr("dataId"));
        for (var i = 0; i < datas.length; i++) {
            if(datas[i].id === id){
                if($(this).hasClass("p1")){
                    datas[i].p1= parseInt($(this).val());
                    return;
                }else if($(this).hasClass("p2")){
                    datas[i].p2= parseInt($(this).val());
                    return;
                }
            }
        }
    });
    //动态调整type值
    $("#tbody").find(".type").bind('keyup',function(){
        var id = parseInt($($(this).parents(".dataTr")[0]).attr("dataId"));
        for (var i = 0; i < datas.length; i++) {
            if(datas[i].id === id){
                datas[i].type=$(this).val();
                return;
            }
        }
    });
});
/**
* 生成新行
*/
function makeTr(data) {
    var tbody = $('#tbody');
    //var rowSize = tbody.children(".dataTr").size();
    var newTr = $('<tr class="dataTr">\
                    <td class="rowIndex"></td>\
                    <td><input type="text" class="type"></td>\
                    <td><input type="text" class="name"></td>\
                    <td><input type="text" class="p p1"></td>\
                    <td><input type="text" class="p p2"></td>\
                    <td class="total"></td>\
                </tr>');
    newTr.attr("dataId",data.id);
    newTr.find('.rowIndex').text(data.id+1);
    newTr.find('.type').val(data.type);
    newTr.find('.name').val(data.name);
    newTr.find('.p1').val(data.p1);
    newTr.find('.p2').val(data.p2);

    var knnTr = $('<tr class="knnTr success">\
                    <td class="rowIndex" colSpan="3"></td>\
                    <td class="p1"></td>\
                    <td class="p2"></td>\
                    <td class="total"></td>\
                </tr>');
    knnTr.attr("index",data.id);
    knnTr.find('.rowIndex').text('与行 '+(data.id+1)+'的属性差的绝对值：');
    tbody.append(newTr);
    tbody.append(knnTr);
}
/**
* 切换计算区域的显示
*/
function switchCalcSpace() {
    const showLable = '显示计算区域';
    const hideLable = '隐藏计算区域';
    if(showLable === $("#switchCalcSpaceBtn").text()){
        $("#switchCalcSpaceBtn").text(hideLable);
        $(".total").show();
        $(".knnTr").show();
    }else{
        $("#switchCalcSpaceBtn").text(showLable);
        $(".total").hide();
        $(".knnTr").hide();
    }
}

/**
* 显示计算过程
* @propertyNames 所有向量名，用于累加计算
* @pName 向量名
* @staticObject 当前对比的标准对象
* @newObject 目标新对象
* @pVal 对应向量的比较结果 
* @total 对比后的合计结果
* @isSame 是否是最匹配的那项
*/
function showCalcVal(compareObj,staticObject,newObject,total) {
    var tr = $("#tbody").find('tr[index="' + staticObject.id + '"]');
    for (var pName in compareObj){
        tr.find('.' + pName).text('|'+staticObject[pName]+'-'+newObject[pName]+'|='+compareObj[pName]);
    }
    tr.find('.total').text(total);
}
/**
* 执行knn计算，得到影片最匹配的标签
*/
function execKNNCalc() {
    var newMovieTr = $('#newMovie');
    var newP1 = parseInt(newMovieTr.find('.p1').val());
    var newP2 = parseInt(newMovieTr.find('.p2').val());
    if(isNaN(newP1) || isNaN(newP2)){
        alert('请为新影片设置向量值，只能为数字');
        return false;    
    }

    var newObject = {}
    newObject.p1 = newP1;
    newObject.p2 = newP2;
    // var sameStandardObj = knnCalc(datas,newObject,['p1','p2']);
    // $("#tbody").find('tr').css('color','');
    // $("#tbody").find('tr[index="' + sameStandardObj.id + '"]').css('color','red');
    // $('#newMovieLabel').val(sameStandardObj.type);//设置标签
    // $('#newMovieLabel').trigger("click");
    var k = parseInt($("#k").val());
    if(isNaN(k) || (k<1 || k>6)){
        alert("k必须为1-6的数字");
        return false;
    }
    var maxLabel = knnCalc(datas,newObject,['p1','p2'],k);
    if(maxLabel !== ''){
        $('#newMovieLabel').val(maxLabel);//设置标签
        alert("经计算、统计、排序取最邻近的前"+k+"项，最多的标签是 " + maxLabel);
    }else{
        alert("没有找到适合的标签");
    }
}

/**
* 重新排序表格，从小到大
*/
function resetTable(orderObjects, k) {
    var tbody = $("#tbody");
    for (var i = orderObjects.length - 1 ; i >= 0 ; i--) {
        var obj = orderObjects[i];
        var tr = $("tr[dataId='"+obj.id+"']");
        var knnTr = tr.next(".knnTr");
        tbody.prepend(knnTr);
        tbody.prepend(tr);
        if (i < k) {
            var indexTd = $("tr[dataId='"+orderObjects[i].id+"']").find(".rowIndex");
            indexTd.css("background-color","yellow");
        }
    }
}
